package dao;

import hibernateUtils.HibernateUtil;

import java.util.ArrayList;
import java.util.List;

import model.Empleado;

import org.hibernate.SessionFactory;
import org.hibernate.classic.Session;

import beans.AdministrativoBean;
import beans.EmpleadoBean;
import beans.EncargadoBean;
import beans.MozoBean;
import beans.SucursalBean;

public class HibernateEmpleadoDAO {
	private static HibernateEmpleadoDAO instancia = null;
	private static SessionFactory sf = null;

	public static HibernateEmpleadoDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new HibernateEmpleadoDAO();
		} 
		return instancia;
	}
	
	public void grabarEmpleado(EmpleadoBean empleadoB){
		/*Abro sesion y grabo el objeto*/
		Session sesion= sf.openSession();
		sesion.beginTransaction();
		sesion.persist(empleadoB);
		sesion.flush();
		sesion.getTransaction().commit();
		sesion.close();
		
	}
	
	public List<Empleado> getEmpleados(){
		List<Empleado> empleados=new ArrayList<Empleado>();
		Session session=sf.openSession();
		List<Empleado> list=session.createQuery("from Empleados").list();
		for (Empleado empleado : list) {
			Empleado aux=new Empleado(empleado.getNombre(),empleado.getClave());
			empleados.add(aux);
		}
		session.close();
		return empleados;		
	}

	public EmpleadoBean buscarMozoPorUsuario(MozoBean mozob) {
		Session session=sf.openSession();
		List<MozoBean> mozo=(List<MozoBean>)session.createQuery("from MozoBean m where m.usuario=?").setString(0, mozob.getNombre()).list();
		if(!mozo.isEmpty())
			return mozo.get(0);
		else
			return null;
	}

	public AdministrativoBean buscarAdministrativoPorUsuario(
			AdministrativoBean administrativob) {
		Session session=sf.openSession();
		List<AdministrativoBean> administrativo=(List<AdministrativoBean>)session.createQuery("from AdministrativoBean m where m.usuario=?").setString(0, administrativob.getNombre()).list();
		if(!administrativo.isEmpty())
			return administrativo.get(0);
		else
			return null;
	}

	public EncargadoBean buscarEncargadoPorUsuario(EncargadoBean encargadob) {
		Session session=sf.openSession();
		List<EncargadoBean> encargado=(List<EncargadoBean>)session.createQuery("from EncargadoBean m where m.usuario=?").setString(0, encargadob.getUsuario()).list();
		if(!encargado.isEmpty())
			return encargado.get(0);
		else
			return null;
	}

	public int buscarNroSucursalPorMozo(EmpleadoBean empleado) {
		Session session=sf.openSession();
		int nroSucursal=0;
		List list=session.createQuery("select s from SucursalBean s join s.salon sa join sa.sectores sec join sec.mozos mo where mo.idEmpleado=?").setInteger(0,empleado.getIdEmpleado()).list();
		if(list.isEmpty())
			return 0;
		else
			return ((List<SucursalBean>) list).get(0).getIdSucursal();
	}

	public int buscarNroSucursalPorAdministrativo(
			EmpleadoBean transformModeltoBean) {
		return 0;
	}

	public int buscarNroSucursalPorEncargado(EmpleadoBean encargado) {
		Session session=sf.openSession();
		int nroSucursal=0;
		List list=session.createQuery("select s from SucursalBean s join s.salon sa join sa.sectores sec join sec.encargados mo where mo.idEmpleado=?").setInteger(0,encargado.getIdEmpleado()).list();
		if(list.isEmpty())
			return 0;
		else
			return ((List<SucursalBean>) list).get(0).getIdSucursal();
	}

}
